﻿using ExcellentProjectPlus.Aplicacion.Cuestionarios.Cuestionarios;
using ExcellentProjectPlus.Dominio.Cuestionarios.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;

namespace Servicios.Cuestionarios.Controllers
{
    public class CuestionariosController : ApiController
    {
        #region Propiedades
        IServicioDeGestionDeCuestionarios  _servicioDeGestionDeCuestionarios;
        #endregion

        #region Constructores
        public CuestionariosController(IServicioDeGestionDeCuestionarios servicioDeGestionDeCuestionarios)
        {
            _servicioDeGestionDeCuestionarios = servicioDeGestionDeCuestionarios;
        }
        #endregion

        //GET
        [HttpGet]
        [ResponseType (typeof(Cuestionario))]
        public IHttpActionResult Get()
        {
            IEnumerable<Cuestionario> cuestionarios = _servicioDeGestionDeCuestionarios.ObtenerCuestionarios();
            if (cuestionarios == null)
            {
                return NotFound();
            }

            return Ok(cuestionarios);
        }


        //GET
        [HttpGet]
        [Route("api/cuestionarios/{id}")]
        [ResponseType(typeof(Cuestionario))]
        public IHttpActionResult GetCuestionarios(int id)
        {
            Cuestionario cuestionario = _servicioDeGestionDeCuestionarios.ObtenerCuestionarioPorId(id);
            if (cuestionario == null)
            {
                return NotFound();
            }

            return Ok(cuestionario);
        }


        //GET
        [HttpGet]
        [Route("api/datoscuestionariosexamen/{id}")]
        [ResponseType(typeof(Cuestionario))]
        public IHttpActionResult GetCuestionariosExamen(int id)
        {
            var cuestionario = _servicioDeGestionDeCuestionarios.ObtenerCuestionarioParaExamen(id);
            if (cuestionario == null)
            {
                return NotFound();
            }

            return Ok(cuestionario);
        }


        [HttpPost]
        [ResponseType(typeof(Cuestionario))]
        public IHttpActionResult Post(Cuestionario cuestionario)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            _servicioDeGestionDeCuestionarios.AgregarCuestionario(cuestionario);

            return CreatedAtRoute("DefaultApi", new { id = cuestionario.IdCuestionario }, cuestionario);
        }

        [HttpPut]
        [Route("api/cuestionarios/{id}")]
        [ResponseType(typeof(Cuestionario))]
        public IHttpActionResult Put(int id, [FromBody]Cuestionario cuestionario)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            if (id != cuestionario.IdCuestionario)
                return BadRequest();

            _servicioDeGestionDeCuestionarios.ModificarCuestionario(cuestionario);

            return StatusCode(HttpStatusCode.NoContent);

        }

        [HttpDelete]
        [Route("api/cuestionarios/{id}")]
        [ResponseType(typeof(Cuestionario))]
        public IHttpActionResult Delete(int id)
        {
            Cuestionario cuestionario = _servicioDeGestionDeCuestionarios.ObtenerCuestionarioPorId(id);

            if (cuestionario == null)            
                return NotFound();

            _servicioDeGestionDeCuestionarios.EliminarCuestionario(cuestionario);
            return Ok(cuestionario);
        }
        private bool CuestionarioExists(int id)
        {
            return _servicioDeGestionDeCuestionarios.ObtenerCuestionarioPorId(id) != null;
        }


        [HttpGet()]
        [Route("api/cuestionarios/GetPagedCuestionarios/{pageIndex}/{pageSize}")]
        public IEnumerable<Cuestionario> GetPagedCuestionarios(int pageIndex, int pageSize)
        {
            return _servicioDeGestionDeCuestionarios.ObtenerCuestionariosPaginado(pageIndex, pageSize);
        }
    }
}